Socket calls are often used to establish a connection between computing devices. For example, an application running on a client device may issue a socket call to create a socket that represents one side of a communication channel between the client device and a server. Additionally or alternatively, an application running on the server may issue a socket call to create a socket that represents the other side of the communication channel between the client device and the server.
Unfortunately, some system configurations may prevent certain applications from being able to achieve an intended networking action (e.g., creating, connecting, and/or binding a socket) by way of a socket call. For example, a client device may have a system configuration that includes a host operating system and a guest operating system installed on a virtual machine. In this example, the host operating system may execute an application that was initially created for and/or ported from the guest operating system.
Even though the application has been ported to the host operating system, the application may still have certain networking dependencies that are specific to the guest operating system. For example, the application may still be configured to rely on a network stack located on the guest operating system to achieve the intended networking action of certain socket calls. Additionally or alternatively, the configuration of socket calls issued in the host operating system may differ in one way or another from the configuration of socket calls issued in the guest operating system. As a result, socket calls issued by the application running on the host operating system may fail to achieve the intended networking action upon execution.
The instant disclosure, therefore, identifies and addresses a need for systems and methods for tunneling socket calls across operating systems to achieve the intended networking actions of the socket calls.